//
//1.最终的解决的方案是: 通过我们的viewController 的有一个子控制器的数组的属性来完成我们的所有的子控制器的添加的功能!
//2.现在是:实现的三个view的切换,,要求的是应用的动画来实现, 应用的是系统的动画的方案:CATransition; 补充的是:过度动画是添加在 view 的layer 的图层上面!
//3.实现的是 模拟系统的控制器的push 动画.实现的是 屏幕的左右的滑动!
//4.实现的思路 第一种的比较low 的实现方案是: 通过监听view的frame进行来改变! 再通过view的系统的动画来实现!但是只能通过向右来滑动!
//5.进行的改进来: 我们要求的是左右的都能进行的滑动!
//6.实现的逻辑判断的思路-->界面: 如果的是-->判断当前的显示的主控制器的view 界面(方便日后的项目的扩张)

#import "YQMainViewController.h"
#import "YQOneViewController.h"
#import "YQTowViewController.h"
#import "YQThreeViewController.h"

@interface YQMainViewController ()
@property(nonatomic,strong)YQOneViewController * one;
@property(nonatomic,strong)YQTowViewController * tow;
@property(nonatomic,strong)YQThreeViewController * three;
/// 记录正在显示的子控制器
@property(nonatomic,strong)UIViewController * showingChildVc;
@property (strong, nonatomic) IBOutlet UIView *contentView;

@end

@implementation YQMainViewController
//屏幕的旋转的事件是: UIWindow ---->rootViewController--->通知他的子控制器--->再通知他的子控制器.....
-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration{
    NSLog(@"YQMainViewController----willRotateToInterfaceOrientation");
}
#pragma mark - 懒加载的所有的控制方法(全部的过时了)!
//-(YQOneViewController *)one{
//    if(_one == nil){
//        _one = [[YQOneViewController alloc]init];
//        _one.view.frame = CGRectMake(0, 44, self.view.frame.size.width, self.view.frame.size.height-44);
//    }
//    return _one;
//}
//-(YQTowViewController *)tow{
//    if(_tow == nil){
//        _tow = [[YQTowViewController alloc]init];
//        _tow.view.frame = CGRectMake(0, 44, self.view.frame.size.width, self.view.frame.size.height-44);
//        _tow.view.backgroundColor = [UIColor greenColor];
//    }
//    return _tow;
//}
//-(YQThreeViewController *)three{
//    if(_three == nil){
//        _three = [[YQThreeViewController alloc]init];
//        _three.view.frame = CGRectMake(0, 44, self.view.frame.size.width, self.view.frame.size.height-44);
//        _three.view.backgroundColor = [UIColor blueColor];
//    }
//    return _three;
//
//}
- (IBAction)oneClick:(id)sender {
    //要求实现的思路是: 只是保留的是当前的控制器而将其他的控制器都干死;
    //对应的添加的顺序来添加对应的控件!
    [self switchVc:0];
}
- (IBAction)towClick:(id)sender {
    //要求实现的思路是: 只是保留的是当前的控制器而将其他的控制器都干死;
    //对应的添加的顺序来添加对应的控件!
    [self switchVc:1];
    
}
- (IBAction)threeClick:(id)sender {
    //要求实现的思路是: 只是保留的是当前的控制器而将其他的控制器都干死;
    //对应的添加的顺序来添加对应的控件!
    [self switchVc:2];
}


-(void)switchVc:(int)index{
    UIViewController * newVc = self.childViewControllers[index];
    //如果index 对应的子控制器正在显示,就是直接返回!
    if(newVc == self.showingChildVc) return;
    //保存所有新旧的控制器的索引: 来以便我们进行的动画的切换!
    NSUInteger newIndex = index;
    NSUInteger oldIndex = [self.childViewControllers indexOfObject:self.showingChildVc];//index转化成整形数值!
    //NSNotFound 表示请求操作的某个内容或者item没有发现，或者不存在(针对的是对象)
    if(oldIndex == NSNotFound){
        oldIndex = newIndex;
    }
    //判断并要求执行动画!
    //从左到右 和 从右到左的frame 的执行!
    if(newIndex >= oldIndex){//从右到左的移动
        CGFloat newX = self.contentView.frame.size.width;
        CGFloat oldX = - self.view.frame.size.width;
        //实现的是:自定义的控制器的切换,和自定义的方法来实现的frame 的切换!
        [self performAnimationWithNewVC:newVc NewX:newX OldX:oldX];
    }else{//从右到左的移动
        CGFloat newX = - self.contentView.frame.size.width;
        CGFloat oldX = self.view.frame.size.width;
        [self performAnimationWithNewVC:newVc NewX:newX OldX:oldX];
    }
}

//执行动画:(实现自定义的动画的切换)
-(void)performAnimationWithNewVC:(UIViewController *)newVc NewX:(CGFloat)newX OldX:(CGFloat)oldX{
    //设置新控制器view 的frame
    CGRect newFrame = CGRectMake(0, 44, self.view.frame.size.width, self.view.frame.size.height-44);//self.contentView.frame;
    newFrame.origin.x = newX;
    newVc.view.frame = newFrame;
    [self.contentView addSubview:newVc.view];
    //动画
    [UIView animateWithDuration:0.5 animations:^{
        //实质上的是: new和old 的frame 的值的交换!
        CGRect oldFrame = self.showingChildVc.view.frame;
        oldFrame.origin.x = oldX;
        self.showingChildVc.view.frame = oldFrame;
        newVc.view.frame = CGRectMake(0, 44, self.view.frame.size.width, self.view.frame.size.height-44);//self.contentView.bounds ;
    } completion:^(BOOL finished) {
        [self.showingChildVc.view removeFromSuperview];
        self.showingChildVc = newVc;
    }];
}

/// 自定义的一个切换控制器的方法!
///
/// @param index 即将显示的控制器的索引
-(void)switchVc1:(int)index{
    //1.先是要移除其他的控制器的view:
    [self.showingChildVc.view removeFromSuperview];
    NSUInteger count = self.childViewControllers.count;
    //通过的是for循环的遍历来移除多余的显示控制器;
    for(int i =0;i < count;i++){
        if(i != index){
            [[self.childViewControllers[i] view] removeFromSuperview];
        }
    }
    //2.添加index对应的控制器的view
    UIView * newView = [self.childViewControllers[index] view];
    newView.frame =CGRectMake(0, 44, self.view.frame.size.width, self.view.frame.size.height-44);
    newView.backgroundColor = [UIColor colorWithRed:((arc4random_uniform(256)/255.0)) green:(arc4random_uniform(256)/255.0) blue:(arc4random_uniform(256)/255.0) alpha:1.0];
    [self.view addSubview:newView];
    self.showingChildVc.view = newView;
}

- (void)viewDidLoad {
    [super viewDidLoad];
    //实现的思路是:将所有的控制器全部添加到主控制器中(就是老大控制器)
    //注意的是: 控制器全部的添加进来的话是不会怎么消耗内存的,而是view 就不同的哦!
    [self addChildViewController:[[YQOneViewController alloc]init]];
    [self addChildViewController:[[YQTowViewController alloc]init]];
    [self addChildViewController:[[YQThreeViewController alloc]init]];
}
@end
